package ch.blinkenlights.android.vanilla;
import java.util.*;
import java.util.regex.*;

/**
 * @author zollty
 * @since 2025-10-01
 */
public class SeriesParser {

	/**
	 * 解析字符串中含有的减法符号系列名称及减去的值
	 * @param input 输入字符串
	 * @return 包含系列名称和减去值的映射
	 */
	public static Map<String, Integer> parseSeriesWithMinus(String input) {
		if (input == null) {
			return null;
		}
		Map<String, Integer> result = new HashMap<>();

		// 匹配模式：系列名称-数字
		Pattern pattern = Pattern.compile("([A-Z]+\\d+)-(\\d+)");
		Matcher matcher = pattern.matcher(input);

		while (matcher.find()) {
			String series = matcher.group(1);
			int value = -Integer.parseInt(matcher.group(2));

			// 处理HV类型的缩写
			if (series.startsWith("HV") && series.length() > 2) {
				String number = series.substring(2);
				// HV1 => H1 和 V1
				result.put("H" + number, value);
				result.put("V" + number, value);
			} else {
				result.put(series, value);
			}
		}

		return result;
	}

	public static String getParentDirectoryName(String normalizedPath) {
		String[] parts = normalizedPath.split("/");
		if (parts.length >= 2) {
			// 倒数第二个元素是父目录
			return parts[parts.length - 2];
		}
		return null;
	}

	// 定义有效的系列名称
	private static final Set<String> VALID_SERIES = new HashSet<>(Arrays.asList(
		"H1", "H2", "H3", "V1", "V2", "V3", "R4", "S0", "S1", "S2", "S3"
	));

	/**
	 * 从文件路径中提取系列名称
	 * @param filePath 文件路径
	 * @return 系列名称，如果未找到则返回null
	 */
	public static String extractSeriesFromPath(String filePath) {
		// 获取文件的父目录名称
		String parentDirName = getParentDirectoryName(filePath);

		// 使用正则表达式匹配系列名称
		Pattern pattern = Pattern.compile("([A-Z]\\d)(?=-)");
		Matcher matcher = pattern.matcher(parentDirName);

		// 查找匹配的系列名称
		while (matcher.find()) {
			String series = matcher.group(1);
			if (VALID_SERIES.contains(series)) {
				return series;
			}
		}

		return null;
	}

	public static void test(String[] args) {
		// 测试用例
		String[] testCases = {
			"H1-2+H2",
			"HV1-2+HV2",
			"R4+HV3-2",
			"HV2+HV1-2",
			"HV1"
		};

		for (String testCase : testCases) {
			System.out.println("输入: " + testCase);
			Map<String, Integer> result = parseSeriesWithMinus(testCase);
			System.out.println("结果: " + result);
			System.out.println();
		}
		/**
		 * 输入: H1-2+H2
		 * 结果: {H1=2}
		 *
		 * 输入: HV1-2+HV2
		 * 结果: {H1=2, V1=2}
		 *
		 * 输入: R4+HV3-2
		 * 结果: {H3=2, V3=2}
		 *
		 * 输入: HV2+HV1-2
		 * 结果: {H1=2, V1=2}
		 *
		 * 输入: HV1
		 * 结果: {}
		 */
		System.out.println(extractSeriesFromPath("H:/__00-DEVICE_SHARE/MUSIC/《舒憩》H3-Relaxed/filenamexxx.mp3"));
	}
}
